package main

import "fmt"

type IMessage interface {
	Message()
	MessageID() string
}

type msg struct {
	arr []int32
}

func (msg) Message() {

}

func (msg) MessageID() string {
	return ""
}

func printT(iMsg interface{}) {
	switch msg := iMsg.(type) {
	case *msg:
		fmt.Println("*msg", msg)
		fmt.Printf("%#v\n", msg.arr)

	case IMessage:
		fmt.Println("IMessage")

	default:
		fmt.Println("unknown")
	}
}

func main() {
	m := &msg{}
	m.arr = make([]int32, 5)
	copy(m.arr, []int32{1, 2, 3, 4, 5})
	//m.arr = append(m.arr, 1)
	printT(m)
}
